package dell.yangzhou01;

import dell.yangzhou.Employee;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
import java.util.stream.Stream;

public class StreamAPITest {
    public static void main(String[] args) {
        //方式一：通过集合创建Stream（实例化Stream）
        List<Employee>employees=EmployeeData.getEmployees();
        //返回一个顺序流
        Stream<Employee> stream = employees.stream();
        //返回一个并行流
        Stream<Employee> employeeStream = employees.parallelStream();

        //方式二：通过数组创建Stream
        int[] arr=new int[]{1,2,3,4,5,6};
        //通过Arrays类的stream（）方法来创建（是int型就会返回一个int型）
        IntStream stream1 = Arrays.stream(arr);
        //一个自定义的数组类型
        Employee e1=new Employee(1001,"Tom");
        Employee e2=new Employee(1002,"Jerry");
        Employee[] employees1=new Employee[]{e1,e2};
        //【注意写法，先用构造器，再将数据传入数组中】
        Stream<Employee> stream2 = Arrays.stream(employees1);
        //根据返回值的类型来创建一个泛型与之相同的对象
        //方式三：通过Stream的of（）创建（可以直接在方法里面放入数据,然后自动生成具体泛型）
        Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5, 6);
        //方式四：【了解即可】创建无限流
        //当需要造一些随机数的时候可以考虑使用此种情况
                //1.迭代
        //public static Stream<T>iterate(final T seed,final UnaryOperator<T> f)
        Stream.iterate(0,t->t+2).limit(10).forEach(System.out::println);
        //遍历前10个偶数，如果不加限制条件limit(10)就不会停止

                //2.生成
        //public static <T>Stream generate(Supplier<T> s)
        Stream.generate(Math::random).limit(10).forEach(System.out::println);
    }
}
